use ggez::{Context, graphics, glam::Vec2};

pub trait Unit: Animation + Movement {}
pub trait Animation {
    fn update(&mut self, ctx: &mut Context) -> ();
    fn display(&self, ctx: &mut Context, canvas : &mut graphics::Canvas) -> ();
}

pub trait Movement {
    fn apply_force(&mut self, force: Vec2) -> ();
    fn attract(& self, m: &Box<dyn Unit>) -> Vec2;

    fn get_location(& self) -> Vec2;
    fn get_mass(& self) -> f32;
    fn get_velocity(& self) -> Vec2;
    fn get_intelligence(& self) -> f32;
    fn get_luck(& self) -> f32;
    fn get_willpower(& self) -> f32;
    fn get_coins(& self) -> f32;
}